#region Header
//=============================================================================
//                          GShield (Game Shield)
//=============================================================================
//
// Original Programmer: Shawn Jackson
// Company: WaveTech Digital Technologies (www.wtdt.com)
// Copyright: (c) 2006 WaveTech Digital Technologies, All Rights Reserved.
// Assembly: Engine
// Code File Name: Users.cs
// Code File Date: 12/07/2006
//
// Code File Info: Wrapper to get Windows users
//=============================================================================
/*
 * UPDATES
 * -------
 *			ShawnJ 5/14/2007 (0.9.0.x): Refactoring for OSS.
 */
#endregion Header

#region License
/*
  GShield - Game Shield
  Copyright (C) 2006-2007 WaveTech Digital Technologies, Inc.
                                http://www.wtdt.com

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/
#endregion License

#region Includes
using System;
using System.Collections;
using System.DirectoryServices;
#endregion Includes

namespace WaveTech.GShield.Engine.Tools
{
	public static class Users
	{
		#region Private Members
		/// <summary>
		/// Users that should not show up in the users list.
		/// </summary>
		private static string[] InvalidUsers = "ASPNET,RemoteAssistance,HelpAssistant,SUPPORT_,Guest".Split(Char.Parse(","));
		#endregion Private Members

		#region Get Users List
		/// <summary>
		/// Gets an array of local Windows system users.
		/// </summary>
		/// <returns>An array of user names</returns>
		public static string[] GetUsersList()
		{
			string sMachine = Environment.MachineName;
			string sLocalPath = "WinNT://" + sMachine;
			ArrayList lst = new ArrayList();

			DirectoryEntry root = new DirectoryEntry(sLocalPath);
			foreach (DirectoryEntry de in root.Children)
			{
				if (de.SchemaClassName.CompareTo("User") == 0)
					lst.Add(de.Properties["Name"].Value);
			}

			object[] users = lst.ToArray();

			foreach (object o in users)
			{
				foreach (string s in InvalidUsers)
				{
					if (((string)o).ToLower().Contains(s.ToLower()))
						lst.Remove(o);
				}
			}

			// The SYSTEM user is used to apply a policy to the entire computer.
			lst.Add("SYSTEM");

			return (string[])lst.ToArray(typeof(string));
		}
		#endregion Get Users List
	}
}